package com.paas.form.visualdev.util;

import com.alibaba.druid.sql.parser.ParserException;
import com.paas.common.core.exception.BusinessException;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.URLEncoder;

public class ResponseFileUtil {
	
	public static void writeFile(HttpServletResponse response,File file){
		try {
			//如果文件不存在
			if(!file.exists()){
				throw new ParserException("您要下载的资源已被删除!");
			}
			response.setStatus(HttpServletResponse.SC_OK);
			response.setHeader("Content-type", "text/html;charset=UTF-8");
			response.setCharacterEncoding("UTF-8");
			response.setContentLength((int) file.length());
			response.setContentType("application/zip");// 定义输出类型
			//获取文件名称
			String fileName=file.getName();
			//设置响应头，控制浏览器下载该文件
			response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));


			//读取要下载的文件，保存到文件输入流
			FileInputStream in = new FileInputStream(file);
			//创建输出流
			OutputStream out = response.getOutputStream();
			//创建缓冲区
			byte buffer[] = new byte[1024];
			int len = 0;
			//循环将输入流中的内容读取到缓冲区当中
			while((len=in.read(buffer))>0){
				//输出缓冲区的内容到浏览器，实现文件下载
				out.write(buffer, 0, len);
			}
			//关闭文件输入流
			in.close();
			//关闭输出流
			out.close();
		} catch (Exception e) {
			throw new ParserException("response FileInputStream 异常!", e);
		}
	}
	/**
	 * 描述:删除文件夹及文件
	 * @param file
	 */
/*	public static void deleteDir(File file){
        //判断是否为文件夹
        if(file.isDirectory()){
            //获取该文件夹下的子文件夹
            File[] files = file.listFiles();
            //循环子文件夹重复调用delete方法
            for (int i = 0; i < files.length; i++) {
                deleteDir(files[i]);
            }
        }
        //若为空文件夹或者文件删除，File类的删除方法
        file.delete();
    }*/
	/**
	 * 描述:删除所有文件(除目录)
	 * @param file
	 */
	public static void deleteFile(File file){
		try {
			if (file.isDirectory()) {
                File[] files = file.listFiles();
                for (File childFile : files) {
                	deleteFile(childFile);
                }
            } else if (file.isFile()){
            	// 删除文件
            	file.delete();
            }
		} catch (Exception e) {
			// TODO: handle exception
			throw new BusinessException("生成代码异常");
		}
	}
}
